package com.huiyeji.hui.service;

import com.huiyeji.hui.entity.User;
import com.huiyeji.hui.entity.UserInfoEntity;
import com.huiyeji.hui.utils.PageUtil;
import com.huiyeji.hui.vo.PageResult;
import com.huiyeji.hui.vo.SelfAndOthersAndGroupsVo;
import com.huiyeji.hui.vo.SimpleOtherVo;

import java.util.List;
import java.util.Set;

/**
 * @author zhaoduo
 */
public interface UserService {

    /**
     * 检查密码,密码正确则得到用户信息,否则为null
     * @param userInfo userInfo
     * @return User
     */
    User getUserInfo(UserInfoEntity userInfo);

    /**
     * 注册
     * @param userInfo userInfo
     */
    void addUser(UserInfoEntity userInfo);

    /**
     * 修改用户基本信息
     * @param requestUser 用户请求修改的信息
     * @return boolean
     */
    boolean baseModify(User requestUser);

    /**
     * 修改密码
     * @param uid uid
     * @param pwd 密码(密文)
     */
    void changePwd(Long uid, String pwd);

    /**
     * 得到源用户的所有好友以及公共群成员信息
     * @param uid uid
     * @param ids 相关用户id集合
     * @return 相关用户列表
     */
    List<SelfAndOthersAndGroupsVo.Other> getOthers(Long uid, Set<Long> ids);

    /**
     * 更改源用户头像
     * @param user uid
     * @param headshot 头像url
     */
    void changeHeadshot(User user, String headshot);

    /**
     * 根据key查询用户信息
     * @param uid uid
     * @param pp KeyPageParam
     * @return PageResult
     */
    PageResult<SimpleOtherVo> keySearch(Long uid, PageUtil.KeyPageParam pp);

    /**
     * 根据条件查询用户信息
     * @param uid uid
     * @param pp UserConditionPageParam
     * @return PageResult
     */
    PageResult<SimpleOtherVo> conditionSearch(Long uid, PageUtil.UserConditionPageParam pp);

    /**
     * 得到简单用户数据
     * @param uid uid
     * @return SimpleOtherVo
     */
    SimpleOtherVo getSimpleOther(Long uid);

    /**
     * 得到用户基本信息(包括与源用户的关系信息)
     * @param uid uid
     * @param oid oid
     * @return Other
     */
    SelfAndOthersAndGroupsVo.Other getOther(Long uid, Long oid);

}
